home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / dungeon / objcts.f < prev    next >
Encoding:
Text File  |  1987-09-16  |  15.5 KB  |  805 lines

  1. C OAPPLI- OBJECT SPECIAL ACTION ROUTINES
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9.     LOGICAL FUNCTION OAPPLI(RI,ARG)
  10.     IMPLICIT INTEGER (A-Z)
  11.     LOGICAL SOBJS,NOBJS
  12.     LOGICAL QOPEN,QON,LIT
  13.     LOGICAL MOVETO,RMDESC,CLOCKD
  14.     LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP,LIGHTP
  15.     LOGICAL QEMPTY,QHERE,F,OPNCLS
  16. #include "parser.h"
  17. #include "gamestate.h"
  18. #include "state.h"
  19. C
  20.     COMMON /BATS/ BATDRP(9)
  21. C
  22. C PUZZLE ROOM
  23. C
  24.     COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
  25. #include "rooms.h"
  26. #include "rflag.h"
  27. #include "rindex.h"
  28. #include "objects.h"
  29. #include "oflags.h"
  30. #include "oindex.h"
  31. #include "clock.h"
  32.  
  33. #include "advers.h"
  34. #include "verbs.h"
  35. #include "flags.h"
  36. C
  37. C FUNCTIONS AND DATA
  38. C
  39.     QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  40.     QON(R)=and(OFLAG1(R),ONBT).NE.0
  41.     DATA MXSMP/99/
  42. C OAPPLI, PAGE 2
  43. C
  44.     IF(RI.EQ.0) GO TO 10
  45. C                        !ZERO IS FALSE APP.
  46.     IF(RI.LE.MXSMP) GO TO 100
  47. C                        !SIMPLE OBJECT?
  48.     IF(PRSO.GT.220) GO TO 5
  49.     IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  50. 5    IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  51.     AV=AVEHIC(WINNER)
  52.     FLOBTS=FLAMBT+LITEBT+ONBT
  53.     OAPPLI=.TRUE.
  54. C
  55.     GO TO (2000,5000,10000,11000,12000,15000,18000,
  56. &     19000,20000,22000,25000,26000,32000,35000,39000,40000,
  57. &     45000,47000,48000,49000,50000,51000,52000,54000,55000,
  58. &     56000,57000,58000,59000,60000,61000,62000),
  59. &        (RI-MXSMP)
  60.     CALL BUG(6,RI)
  61. C
  62. C RETURN HERE TO DECLARE FALSE RESULT
  63. C
  64. 10    OAPPLI=.FALSE.
  65.     RETURN
  66. C
  67. C SIMPLE OBJECTS, PROCESSED EXTERNALLY.
  68. C
  69. 100    IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG)
  70.     IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG)
  71.     RETURN
  72. C OAPPLI, PAGE 3
  73. C
  74. C O100--    MACHINE FUNCTION
  75. C
  76. 2000    IF(HERE.NE.MMACH) GO TO 10
  77. C                        !NOT HERE? F
  78.     OAPPLI=OPNCLS(MACHI,123,124)
  79. C                        !HANDLE OPN/CLS.
  80.     RETURN
  81. C
  82. C O101--    WATER FUNCTION
  83. C
  84. 5000    IF(PRSA.NE.FILLW) GO TO 5050
  85. C                        !FILL X WITH Y IS
  86.     PRSA=PUTW
  87. C                        !MADE INTO
  88.     I=PRSI
  89.     PRSI=PRSO
  90.     PRSO=I
  91. C                        !PUT Y IN X.
  92.     I=ODI2
  93.     ODI2=ODO2
  94.     ODO2=I
  95. 5050    IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100
  96.     CALL RSPEAK(561)
  97. C                        !WATER IS IND OBJ,
  98.     RETURN
  99. C                        !PUNT.
  100. C
  101. 5100    IF(PRSA.NE.TAKEW) GO TO 5400
  102. C                        !TAKE WATER?
  103.     IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL))
  104. &        GO TO 5500
  105.     IF(OCAN(PRSO).EQ.0) GO TO 5200
  106. C                        !INSIDE ANYTHING?
  107.     IF(QOPEN(OCAN(PRSO))) GO TO 5200
  108. C                        !YES, OPEN?
  109.     CALL RSPEAK(525,ODESC2(OCAN(PRSO)))
  110. C                        !INSIDE, CLOSED, PUNT.
  111.     RETURN
  112. C
  113. 5200    CALL RSPEAK(615)
  114. C                        !NOT INSIDE OR OPEN,
  115.     RETURN
  116. C                        !SLIPS THRU FINGERS.
  117. C
  118. 5400    IF(PRSA.NE.PUTW) GO TO 5700
  119. C                        !PUT WATER IN X?
  120.     IF((AV.NE.0).AND.(PRSI.EQ.AV)) GO TO 5800
  121. C                        !IN VEH?
  122.     IF(PRSI.EQ.BOTTL) GO TO 5500
  123. C                        !IN BOTTLE?
  124.     CALL RSPSUB(297,ODI2)
  125. C                        !WONT GO ELSEWHERE.
  126.     CALL NEWSTA(PRSO,0,0,0,0)
  127. C                        !VANISH WATER.
  128.     RETURN
  129. C
  130. 5500    IF(QOPEN(BOTTL)) GO TO 5550
  131. C                        !BOTTLE OPEN?
  132.     CALL RSPEAK(612)
  133. C                        !NO, LOSE.
  134.     RETURN
  135. C
  136. 5550    IF(QEMPTY(BOTTL)) GO TO 5600
  137. C                        !OPEN, EMPTY?
  138.     CALL RSPEAK(613)
  139. C                        !NO, ALREADY FULL.
  140.     RETURN
  141. C
  142. 5600    CALL NEWSTA(WATER,614,0,BOTTL,0)
  143. C                        !TAKE WATER TO BOTTLE.
  144.     RETURN
  145. C
  146. 5700    IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW).AND.
  147. &        (PRSA.NE.GIVEW)) GO TO 5900
  148.     IF(AV.NE.0) GO TO 5800
  149. C                        !INTO VEHICLE?
  150.     CALL NEWSTA(PRSO,133,0,0,0)
  151. C                        !NO, VANISHES.
  152.     RETURN
  153. C
  154. 5800    CALL NEWSTA(WATER,0,0,AV,0)
  155. C                        !WATER INTO VEHICLE.
  156.     CALL RSPSUB(296,ODESC2(AV))
  157. C                        !DESCRIBE.
  158.     RETURN
  159. C
  160. 5900    IF(PRSA.NE.THROWW) GO TO 10
  161. C                        !LAST CHANCE, THROW?
  162.     CALL NEWSTA(PRSO,132,0,0,0)
  163. C                        !VANISHES.
  164.     RETURN
  165. C OAPPLI, PAGE 4
  166. C
  167. C O102--    LEAF PILE
  168. C
  169. 10000    IF(PRSA.NE.BURNW) GO TO 10500
  170. C                        !BURN?
  171.     IF(OROOM(PRSO).EQ.0) GO TO 10100
  172. C                        !WAS HE CARRYING?
  173.     CALL NEWSTA(PRSO,158,0,0,0)
  174. C                        !NO, BURN IT.
  175.     RETURN
  176. C
  177. 10100    CALL NEWSTA(PRSO,0,HERE,0,0)
  178. C                        !DROP LEAVES.
  179.     CALL JIGSUP(159)
  180. C                        !BURN HIM.
  181.     RETURN
  182. C
  183. 10500    IF(PRSA.NE.MOVEW) GO TO 10600
  184. C                        !MOVE?
  185.     CALL RSPEAK(2)
  186. C                        !DONE.
  187.     RETURN
  188. C
  189. 10600    IF((PRSA.NE.LOOKUW).OR.(RVCLR.NE.0)) GO TO 10
  190.     CALL RSPEAK(344)
  191. C                        !LOOK UNDER?
  192.     RETURN
  193. C
  194. C O103--    TROLL, DONE EXTERNALLY.
  195. C
  196. 11000    OAPPLI=TROLLP(ARG)
  197. C                        !TROLL PROCESSOR.
  198.     RETURN
  199. C
  200. C O104--    RUSTY KNIFE.
  201. C
  202. 12000    IF(PRSA.NE.TAKEW) GO TO 12100
  203. C                        !TAKE?
  204.     IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160)
  205. C                        !PULSE SWORD.
  206.     GO TO 10
  207. C
  208. 12100    IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR.
  209. &        (PRSI.NE.RKNIF)).AND.
  210. &      (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR.
  211. &        (PRSO.NE.RKNIF))) GO TO 10
  212.     CALL NEWSTA(RKNIF,0,0,0,0)
  213. C                        !KILL KNIFE.
  214.     CALL JIGSUP(161)
  215. C                        !KILL HIM.
  216.     RETURN
  217. C OAPPLI, PAGE 5
  218. C
  219. C O105--    GLACIER
  220. C
  221. 15000    IF(PRSA.NE.THROWW) GO TO 15500
  222. C                        !THROW?
  223.     IF(PRSO.NE.TORCH) GO TO 15400
  224. C                        !TORCH?
  225.     CALL NEWSTA(ICE,169,0,0,0)
  226. C                        !MELT ICE.
  227.     ODESC1(TORCH)=174
  228. C                        !MUNG TORCH.
  229.     ODESC2(TORCH)=173
  230.     OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  231.     CALL NEWSTA(TORCH,0,STREA,0,0)
  232. C                        !MOVE TORCH.
  233.     GLACRF=.TRUE.
  234. C                        !GLACIER GONE.
  235.     IF(.NOT.LIT(HERE)) CALL RSPEAK(170)
  236. C                        !IN DARK?
  237.     RETURN
  238. C
  239. 15400    CALL RSPEAK(171)
  240. C                        !JOKE IF NOT TORCH.
  241.     RETURN
  242. C
  243. 15500    IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
  244.     IF(and(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600
  245.     CALL RSPSUB(298,ODI2)
  246. C                        !CANT MELT WITH THAT.
  247.     RETURN
  248. C
  249. 15600    GLACMF=.TRUE.
  250. C                        !PARTIAL MELT.
  251.     IF(PRSI.NE.TORCH) GO TO 15700
  252. C                        !MELT WITH TORCH?
  253.     ODESC1(TORCH)=174
  254. C                        !MUNG TORCH.
  255.     ODESC2(TORCH)=173
  256.     OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  257. 15700    CALL JIGSUP(172)
  258. C                        !DROWN.
  259.     RETURN
  260. C
  261. C O106--    BLACK BOOK
  262. C
  263. 18000    IF(PRSA.NE.OPENW) GO TO 18100
  264. C                        !OPEN?
  265.     CALL RSPEAK(180)
  266. C                        !JOKE.
  267.     RETURN
  268. C
  269. 18100    IF(PRSA.NE.CLOSEW) GO TO 18200
  270. C                        !CLOSE?
  271.     CALL RSPEAK(181)
  272.     RETURN
  273. C
  274. 18200    IF(PRSA.NE.BURNW) GO TO 10
  275. C                        !BURN?
  276.     CALL NEWSTA(PRSO,0,0,0,0)
  277. C                        !FATAL JOKE.
  278.     CALL JIGSUP(182)
  279.     RETURN
  280. C OAPPLI, PAGE 6
  281. C
  282. C O107--    CANDLES, PROCESSED EXTERNALLY
  283. C
  284. 19000    OAPPLI=LIGHTP(CANDL)
  285.     RETURN
  286. C
  287. C O108--    MATCHES, PROCESSED EXTERNALLY
  288. C
  289. 20000    OAPPLI=LIGHTP(MATCH)
  290.     RETURN
  291. C
  292. C O109--    CYCLOPS, PROCESSED EXTERNALLY.
  293. C
  294. 22000    OAPPLI=CYCLOP(ARG)
  295. C                        !CYCLOPS
  296.     RETURN
  297. C
  298. C O110--    THIEF, PROCESSED EXTERNALLY
  299. C
  300. 25000    OAPPLI=THIEFP(ARG)
  301.     RETURN
  302. C
  303. C O111--    WINDOW
  304. C
  305. 26000    OAPPLI=OPNCLS(WINDO,208,209)
  306. C                        !OPEN/CLS WINDOW.
  307.     RETURN
  308. C
  309. C O112--    PILE OF BODIES
  310. C
  311. 32000    IF(PRSA.NE.TAKEW) GO TO 32500
  312. C                        !TAKE?
  313.     CALL RSPEAK(228)
  314. C                        !CANT.
  315.     RETURN
  316. C
  317. 32500    IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
  318.     IF(ONPOLF) RETURN
  319. C                        !BURN OR MUNG?
  320.     ONPOLF=.TRUE.
  321. C                        !SET HEAD ON POLE.
  322.     CALL NEWSTA(HPOLE,0,LLD2,0,0)
  323.     CALL JIGSUP(229)
  324. C                        !BEHEADED.
  325.     RETURN
  326. C
  327. C O113--    VAMPIRE BAT
  328. C
  329. 35000    CALL RSPEAK(50)
  330. C                        !TIME TO FLY, JACK.
  331.     F=MOVETO(BATDRP(RND(9)+1),WINNER)
  332. C                        !SELECT RANDOM DEST.
  333.     F=RMDESC(0)
  334.     RETURN
  335. C OAPPLI, PAGE 7
  336. C
  337. C O114--    STICK
  338. C
  339. 39000    IF(PRSA.NE.WAVEW) GO TO 10
  340. C                        !WAVE?
  341.     IF(HERE.EQ.MRAIN) GO TO 39500
  342. C                        !ON RAINBOW?
  343.     IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
  344.     CALL RSPEAK(244)
  345. C                        !NOTHING HAPPENS.
  346.     RETURN
  347. C
  348. 39200    OFLAG1(POT)=or(OFLAG1(POT),VISIBT)
  349.     RAINBF=.NOT. RAINBF
  350. C                        !COMPLEMENT RAINBOW.
  351.     I=245
  352. C                        !ASSUME OFF.
  353.     IF(RAINBF) I=246
  354. C                        !IF ON, SOLID.
  355.     CALL RSPEAK(I)
  356. C                        !DESCRIBE.
  357.     RETURN
  358. C
  359. 39500    RAINBF=.FALSE.
  360. C                        !ON RAINBOW,
  361.     CALL JIGSUP(247)
  362. C                        !TAKE A FALL.
  363.     RETURN
  364. C
  365. C O115--    BALLOON, HANDLED EXTERNALLY
  366. C
  367. 40000    OAPPLI=BALLOP(ARG)
  368.     RETURN
  369. C
  370. C O116--    HEADS
  371. C
  372. 45000    IF(PRSA.NE.HELLOW) GO TO 45100
  373. C                        !HELLO HEADS?
  374.     CALL RSPEAK(633)
  375. C                        !TRULY BIZARRE.
  376.     RETURN
  377. C
  378. 45100    IF(PRSA.EQ.READW) GO TO 10
  379. C                        !READ IS OK.
  380.     CALL NEWSTA(LCASE,260,LROOM,0,0)
  381. C                        !MAKE LARGE CASE.
  382.     I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
  383.     CALL JIGSUP(261)
  384. C                        !KILL HIM.
  385.     RETURN
  386. C OAPPLI, PAGE 8
  387. C
  388. C O117--    SPHERE
  389. C
  390. 47000    IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10
  391. C                        !TAKE?
  392.     IF(WINNER.NE.PLAYER) GO TO 47500
  393. C                        !ROBOT TAKE?
  394.     CALL RSPEAK(263)
  395. C                        !NO, DROP CAGE.
  396.     IF(OROOM(ROBOT).NE.HERE) GO TO 47200
  397. C                        !ROBOT HERE?
  398.     F=MOVETO(CAGED,WINNER)
  399. C                        !YES, MOVE INTO CAGE.
  400.     CALL NEWSTA(ROBOT,0,CAGED,0,0)
  401. C                        !MOVE ROBOT.
  402.     AROOM(AROBOT)=CAGED
  403.     OFLAG1(ROBOT)=or(OFLAG1(ROBOT),NDSCBT)
  404.     CTICK(CEVSPH)=10
  405. C                        !GET OUT IN 10 OR ELSE.
  406.     RETURN
  407. C
  408. 47200    CALL NEWSTA(SPHER,0,0,0,0)
  409. C                        !YOURE DEAD.
  410.     RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
  411.     RRAND(CAGER)=147
  412.     CALL JIGSUP(148)
  413. C                        !MUNG PLAYER.
  414.     RETURN
  415. C
  416. 47500    CALL NEWSTA(SPHER,0,0,0,0)
  417. C                        !ROBOT TRIED,
  418.     CALL NEWSTA(ROBOT,264,0,0,0)
  419. C                        !KILL HIM.
  420.     CALL NEWSTA(CAGE,0,HERE,0,0)
  421. C                        !INSERT MANGLED CAGE.
  422.     RETURN
  423. C
  424. C O118--    GEOMETRICAL BUTTONS
  425. C
  426. 48000    IF(PRSA.NE.PUSHW) GO TO 10
  427. C                        !PUSH?
  428.     I=PRSO-SQBUT+1
  429. C                        !GET BUTTON INDEX.
  430.     IF((I.LE.0).OR.(I.GE.4)) GO TO 10
  431. C                        !A BUTTON?
  432.     IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
  433.     CALL JIGSUP(265)
  434. C                        !YOU PUSHED, YOU DIE.
  435.     RETURN
  436. C
  437. 48100    I=267
  438.     IF(CAROZF) I=266
  439. C                        !SPEED UP?
  440.     CAROZF=.TRUE.
  441.     CALL RSPEAK(I)
  442.     RETURN
  443. C
  444. 48200    I=266
  445. C                        !ASSUME NO CHANGE.
  446.     IF(CAROZF) I=268
  447.     CAROZF=.FALSE.
  448.     CALL RSPEAK(I)
  449.     RETURN
  450. C
  451. 48300    CAROFF=.NOT.CAROFF
  452. C                        !FLIP CAROUSEL.
  453.     IF(.NOT.QHERE(IRBOX,CAROU)) RETURN
  454. C                        !IRON BOX IN CAROUSEL?
  455.     CALL RSPEAK(269)
  456. C                        !YES, THUMP.
  457.     OFLAG1(IRBOX)=xor(OFLAG1(IRBOX),VISIBT)
  458.     IF(CAROFF) RFLAG(CAROU)=and(RFLAG(CAROU), not(RSEEN))
  459.     RETURN
  460. C
  461. C O119--    FLASK FUNCTION
  462. C
  463. 49000    IF(PRSA.EQ.OPENW) GO TO 49100
  464. C                        !OPEN?
  465.     IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  466.     CALL NEWSTA(FLASK,270,0,0,0)
  467. C                        !KILL FLASK.
  468. 49100    RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  469.     RRAND(HERE)=271
  470.     CALL JIGSUP(272)
  471. C                        !POISONED.
  472.     RETURN
  473. C
  474. C O120--    BUCKET FUNCTION
  475. C
  476. 50000    IF(ARG.NE.2) GO TO 10
  477. C                        !READOUT?
  478.     IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
  479.     BUCKTF=.TRUE.
  480. C                        !BUCKET AT TOP.
  481.     CTICK(CEVBUC)=100
  482. C                        !START COUNTDOWN.
  483.     CALL NEWSTA(BUCKE,290,TWELL,0,0)
  484. C                        !REPOSITION BUCKET.
  485.     GO TO 50900
  486. C                        !FINISH UP.
  487. C
  488. 50500    IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
  489.     BUCKTF=.FALSE.
  490.     CALL NEWSTA(BUCKE,291,BWELL,0,0)
  491. C                        !BUCKET AT BOTTOM.
  492. 50900    IF(AV.NE.BUCKE) RETURN
  493. C                        !IN BUCKET?
  494.     F=MOVETO(OROOM(BUCKE),WINNER)
  495. C                        !MOVE ADVENTURER.
  496.     F=RMDESC(0)
  497. C                        !DESCRIBE ROOM.
  498.     RETURN
  499. C OAPPLI, PAGE 9
  500. C
  501. C O121--    EATME CAKE
  502. C
  503. 51000    IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
  504. &        (HERE.NE.ALICE)) GO TO 10
  505.     CALL NEWSTA(ECAKE,273,0,0,0)
  506. C                        !VANISH CAKE.
  507.     OFLAG1(ROBOT)=and(OFLAG1(ROBOT), not(VISIBT))
  508.     OAPPLI=MOVETO(ALISM,WINNER)
  509. C                        !MOVE TO ALICE SMALL.
  510.     IZ=64
  511.     IR=ALISM
  512.     IO=ALICE
  513.     GO TO 52405
  514. C
  515. C O122--    ICINGS
  516. C
  517. 52000    IF(PRSA.NE.READW) GO TO 52200
  518. C                        !READ?
  519.     I=274
  520. C                        !CANT READ.
  521.     IF(PRSI.NE.0) I=275
  522. C                        !THROUGH SOMETHING?
  523.     IF(PRSI.EQ.BOTTL) I=276
  524. C                        !THROUGH BOTTLE?
  525.     IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)
  526. C                        !THROUGH FLASK?
  527.     CALL RSPEAK(I)
  528. C                        !READ FLASK.
  529.     RETURN
  530. C
  531. 52200    IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL))
  532. &        GO TO 52300
  533.     CALL NEWSTA(POOL,280,0,0,0)
  534. C                        !VANISH POOL.
  535.     OFLAG1(SAFFR)=or(OFLAG1(SAFFR),VISIBT)
  536.     RETURN
  537. C
  538. 52300    IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR))
  539. &        GO TO 10
  540.     IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
  541. &        (PRSO.NE.ORICE)) GO TO 52400
  542.     CALL NEWSTA(ORICE,0,0,0,0)
  543. C                        !VANISH ORANGE ICE.
  544.     RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  545.     RRAND(HERE)=281
  546.     CALL JIGSUP(282)
  547. C                        !VANISH ADVENTURER.
  548.     RETURN
  549. C
  550. 52400    IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE))
  551. &        GO TO 10
  552.     CALL NEWSTA(BLICE,283,0,0,0)
  553. C                        !VANISH BLUE ICE.
  554.     IF(HERE.NE.ALISM) GO TO 52500
  555. C                        !IN REDUCED ROOM?
  556.     OFLAG1(ROBOT)=or(OFLAG1(ROBOT),VISIBT)
  557.     IO=HERE
  558.     OAPPLI=MOVETO(ALICE,WINNER)
  559.     IZ=1/64
  560.     IR=ALICE
  561. C
  562. C  Do a size change, common loop used also by code at 51000
  563. C
  564. 52405    DO 52450 I=1,OLNT
  565. C                        !ENLARGE WORLD.
  566.       IF((OROOM(I).NE.IO).OR.(OSIZE(I).EQ.10000))
  567. &        GO TO 52450
  568.       OROOM(I)=IR
  569.       OSIZE(I)=OSIZE(I)*IZ
  570. 52450    CONTINUE
  571.     RETURN
  572. C
  573. 52500    CALL JIGSUP(284)
  574. C                        !ENLARGED IN WRONG ROOM.
  575.     RETURN
  576. C
  577. C O123--    BRICK
  578. C
  579. 54000    IF(PRSA.NE.BURNW) GO TO 10
  580. C                        !BURN?
  581.     CALL JIGSUP(150)
  582. C                        !BOOM
  583. C                        !
  584.     RETURN
  585. C
  586. C O124--    MYSELF
  587. C
  588. 55000    IF(PRSA.NE.GIVEW) GO TO 55100
  589. C                        !GIVE?
  590.     CALL NEWSTA(PRSO,2,0,0,PLAYER)
  591. C                        !DONE.
  592.     RETURN
  593. C
  594. 55100    IF(PRSA.NE.TAKEW) GO TO 55200
  595. C                        !TAKE?
  596.     CALL RSPEAK(286)
  597. C                        !JOKE.
  598.     RETURN
  599. C
  600. 55200    IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10
  601.     CALL JIGSUP(287)
  602. C                        !KILL, NO JOKE.
  603.     RETURN
  604. C OAPPLI, PAGE 10
  605. C
  606. C O125--    PANELS INSIDE MIRROR
  607. C
  608. 56000    IF(PRSA.NE.PUSHW) GO TO 10
  609. C                        !PUSH?
  610.     IF(POLEUF.NE.0) GO TO 56100
  611. C                        !SHORT POLE UP?
  612.     I=731
  613. C                        !NO, WONT BUDGE.
  614.     IF(MOD(MDIR,180).EQ.0) I=732
  615. C                        !DIFF MSG IF N-S.
  616.     CALL RSPEAK(I)
  617. C                        !TELL WONT MOVE.
  618.     RETURN
  619. C
  620. 56100    IF(MLOC.NE.MRG) GO TO 56200
  621. C                        !IN GDN ROOM?
  622.     CALL RSPEAK(733)
  623. C                        !YOU LOSE.
  624.     CALL JIGSUP(685)
  625.     RETURN
  626. C
  627. 56200    I=831
  628. C                        !ROTATE L OR R.
  629.     IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
  630.     CALL RSPEAK(I)
  631. C                        !TELL DIRECTION.
  632.     MDIR=MOD(MDIR+45+(270*(I-830)),360)
  633. C                        !CALCULATE NEW DIR.
  634.     CALL RSPSUB(734,695+(MDIR/45))
  635. C                        !TELL NEW DIR.
  636.     IF(WDOPNF) CALL RSPEAK(730)
  637. C                        !IF PANEL OPEN, CLOSE.
  638.     WDOPNF=.FALSE.
  639.     RETURN
  640. C                        !DONE.
  641. C
  642. C O126--    ENDS INSIDE MIRROR
  643. C
  644. 57000    IF(PRSA.NE.PUSHW) GO TO 10
  645. C                        !PUSH?
  646.     IF(MOD(MDIR,180).EQ.0) GO TO 57100
  647. C                        !MIRROR N-S?
  648.     CALL RSPEAK(735)
  649. C                        !NO, WONT BUDGE.
  650.     RETURN
  651. C
  652. 57100    IF(PRSO.NE.PINDR) GO TO 57300
  653. C                        !PUSH PINE WALL?
  654.     IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
  655. &      ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
  656. &       (MLOC.EQ.MRG)) GO TO 57200
  657.     CALL RSPEAK(736)
  658. C                        !NO, OPENS.
  659.     WDOPNF=.TRUE.
  660. C                        !INDICATE OPEN.
  661.     CFLAG(CEVPIN)=.TRUE.
  662. C                        !TIME OPENING.
  663.     CTICK(CEVPIN)=5
  664.     RETURN
  665. C
  666. 57200    CALL RSPEAK(737)
  667. C                        !GDN SEES YOU, DIE.
  668.     CALL JIGSUP(685)
  669.     RETURN
  670. C
  671. 57300    NLOC=MLOC-1
  672. C                        !NEW LOC IF SOUTH.
  673.     IF(MDIR.EQ.0) NLOC=MLOC+1
  674. C                        !NEW LOC IF NORTH.
  675.     IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
  676.     CALL RSPEAK(738)
  677. C                        !HAVE REACHED END.
  678.     RETURN
  679. C
  680. 57400    I=699
  681. C                        !ASSUME SOUTH.
  682.     IF(MDIR.EQ.0) I=695
  683. C                        !NORTH.
  684.     J=739
  685. C                        !ASSUME SMOOTH.
  686.     IF(POLEUF.NE.0) J=740
  687. C                        !POLE UP, WOBBLES.
  688.     CALL RSPSUB(J,I)
  689. C                        !DESCRIBE.
  690.     MLOC=NLOC
  691.     IF(MLOC.NE.MRG) RETURN
  692. C                        !NOW IN GDN ROOM?
  693. C
  694.     IF(POLEUF.NE.0) GO TO 57500
  695. C                        !POLE UP, GDN SEES.
  696.     IF(MROPNF.OR.WDOPNF) GO TO 57600
  697. C                        !DOOR OPEN, GDN SEES.
  698.     IF(MR1F.AND.MR2F) RETURN
  699. C                        !MIRRORS INTACT, OK.
  700.     CALL RSPEAK(742)
  701. C                        !MIRRORS BROKEN, DIE.
  702.     CALL JIGSUP(743)
  703.     RETURN
  704. C
  705. 57500    CALL RSPEAK(741)
  706. C                        !POLE UP, DIE.
  707.     CALL JIGSUP(743)
  708.     RETURN
  709. C
  710. 57600    CALL RSPEAK(744)
  711. C                        !DOOR OPEN, DIE.
  712.     CALL JIGSUP(743)
  713.     RETURN
  714. C OAPPLI, PAGE 11
  715. C
  716. C O127--    GLOBAL GUARDIANS
  717. C
  718. 58000    IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  719. &      (PRSA.NE.MUNGW)) GO TO 58100
  720.     CALL JIGSUP(745)
  721. C                        !LOSE.
  722.     RETURN
  723. C
  724. 58100    IF(PRSA.NE.HELLOW) GO TO 10
  725. C                        !HELLO?
  726.     CALL RSPEAK(746)
  727. C                        !NO REPLY.
  728.     RETURN
  729. C
  730. C O128--    GLOBAL MASTER
  731. C
  732. 59000    IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  733. &      (PRSA.NE.MUNGW)) GO TO 59100
  734.     CALL JIGSUP(747)
  735. C                        !BAD IDEA.
  736.     RETURN
  737. C
  738. 59100    IF(PRSA.NE.TAKEW) GO TO 10
  739. C                        !TAKE?
  740.     CALL RSPEAK(748)
  741. C                        !JOKE.
  742.     RETURN
  743. C
  744. C O129--    NUMERAL FIVE (FOR JOKE)
  745. C
  746. 60000    IF(PRSA.NE.TAKEW) GO TO 10
  747. C                        !TAKE FIVE?
  748.     CALL RSPEAK(419)
  749. C                        !TIME PASSES.
  750.     DO 60100 I=1,3
  751. C                        !WAIT A WHILE.
  752.       IF(CLOCKD(X)) RETURN
  753. 60100    CONTINUE
  754.     RETURN
  755. C
  756. C O130--    CRYPT FUNCTION
  757. C
  758. 61000    IF(.NOT.ENDGMF) GO TO 45000
  759. C                        !IF NOT EG, DIE.
  760.     IF(PRSA.NE.OPENW) GO TO 61100
  761. C                        !OPEN?
  762.     I=793
  763.     IF(QOPEN(TOMB)) I=794
  764.     CALL RSPEAK(I)
  765.     OFLAG2(TOMB)=or(OFLAG2(TOMB),OPENBT)
  766.     RETURN
  767. C
  768. 61100    IF(PRSA.NE.CLOSEW) GO TO 45000
  769. C                        !CLOSE?
  770.     I=795
  771.     IF(QOPEN(TOMB)) I=796
  772.     CALL RSPEAK(I)
  773.     OFLAG2(TOMB)=and(OFLAG2(TOMB),not(OPENBT))
  774.     IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3
  775. C                        !IF IN CRYPT, START EG.
  776.     RETURN
  777. C OAPPLI, PAGE 12
  778. C
  779. C O131--    GLOBAL LADDER
  780. C
  781. 62000    IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3))
  782. &        GO TO 62100
  783.     CALL RSPEAK(865)
  784. C                        !NO, LOSE.
  785.     RETURN
  786. C
  787. 62100    IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200
  788.     CALL RSPEAK(866)
  789. C                        !CLIMB IT?
  790.     RETURN
  791. C
  792. 62200    IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2))
  793. &        GO TO 62300
  794.     CALL RSPEAK(867)
  795. C                        !NO, HIT YOUR HEAD.
  796.     RETURN
  797. C
  798. 62300    F=MOVETO(CPANT,WINNER)
  799. C                        !TO ANTEROOM.
  800.     F=RMDESC(3)
  801. C                        !DESCRIBE.
  802.     RETURN
  803. C
  804.     END
  805.